home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / share / Dos / VARIOS / pascal / SWAG9605.DDD / 0072_Fast File Encryption.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-05-31  |  1.9 KB  |  107 lines

  1. {$g+,a+}
  2. unit crypt;
  3.  
  4. INTERFACE
  5.  
  6. procedure maketable(const seed:word);
  7. procedure encrypt(var data;const size,xoa:word);
  8. procedure setslide(const slide:word);
  9. function  maxslide:word;
  10.  
  11. IMPLEMENTATION
  12.  
  13. const
  14.   maxx=2028; { Max is a word! }
  15. var
  16.   xortable:array[0..maxx]of byte;
  17.   slidepos:word;
  18.  
  19. procedure maketable(const seed:word); assembler;
  20. asm
  21.   mov ax,seg xortable
  22.   mov es,ax
  23.   mov di,offset xortable
  24.   xor cx,cx
  25.   mov cx,maxx
  26.   mov si,seed
  27.   xor ax,ax
  28.   @@loop:
  29.     not ax
  30.     inc ax
  31.     neg ax
  32.     add ax,cx
  33.     and ax,si
  34.     ror si,3
  35.     rol ax,2
  36.     xor ax,si
  37.     inc si
  38.     mov es:[di],al
  39.     inc di
  40.     dec cx
  41.   jnz @@loop
  42. end;
  43.  
  44. procedure encrypt(var data;const size,xoa:word); assembler;
  45. {
  46.   ds:si => pointer to XorTable
  47.   es:di => pointer to data
  48.   ax    => temporary
  49.            => al is used for the thing that get changed,
  50.               ah to hold a byte from the XORTABLE.
  51.   bx    => used for temporary calculation.
  52.   cx    => holds total end-up size for loop-end-check :-)
  53.   dx    => holds additional XOR value. }
  54. asm
  55.   mov ax,seg [xortable]
  56.   mov ds,ax
  57.   mov si,offset [xortable]
  58.   les di,[data]
  59.   mov cx,di
  60.   add cx,[size]
  61.   mov dx,[xoa]
  62.   jmp @@loop
  63.   @@zeroit:
  64.     mov [slidepos],0
  65.   @@loop:
  66.     cmp [slidepos],maxx
  67.     jg @@zeroit { Slidepos become to big? }
  68.     mov bx,si
  69.     add bx,slidepos
  70.     mov ah,ds:[bx]
  71.     mov bx,[slidepos]
  72.  
  73.     mov al,es:[di]
  74.     not al
  75.     xor al,ah
  76.     xor al,dl
  77.     xor al,bl
  78.     xor al,dh
  79.     not al
  80.     xor al,bh
  81.     mov es:[di],al
  82.     inc [slidepos]
  83.     inc di
  84.     cmp di,cx
  85.     jb @@loop
  86. end;
  87.  
  88. procedure setslide(const slide:word); assembler;
  89. asm
  90.   cmp [slide],maxx
  91.   ja @@exit2
  92.   mov ax,[slide]
  93.   mov [slidepos],ax
  94.   jmp @@exit
  95.   @@exit2:
  96.     mov [slidepos],0
  97.   @@exit:
  98. end;
  99.  
  100. function maxslide:word; assembler;
  101. asm
  102.   mov ax,[maxx]
  103. end;
  104.  
  105. begin
  106.   slidepos:=0;
  107. end.